class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
class Person {
String name;
int age;
Person(this.name, this.age);
}
class Person {
String name;
int age;
// 基本構造函數
Person(this.name, this.age);
// 命名構造函數
Person.guest() {
name = 'Guest';
age = 18;
}
// 使用初始化列表的命名構造函數
Person.adult(this.name) : age = 18;
// 工廠構造函數
factory Person.fromData(Map<String, dynamic> data) {
if (data['age'] >= 18) {
return Person.adult(data['name']);
} else {
return Person(data['name'], data['age']);
}
}
}
其中上面 Person.adult
建構子搭配使用的 :
,這個在建構子後面的「冒號」叫做 Initializer List 初始化列表。在這邊可以使用 ,
組織一些表達式 Expression,主要用於執行一些初始化操作。這對於設定 final
變數特別有用。
assert(...)
,便於檢查參數值class Person {
// final 是為了宣告一個不可變動,和 const 的差別為時間點
// const 在編譯就固定了
// final 在執行時期
final String name;
final int age;
final String comment;
Person(this.name, this.age): comment = '${name} 目前 ${age} 歲';
}
class Person {
String name;
int age;
Person(this.name, this.age);
}
class Developer extends Person {
String skill;
Developer(String name, int age, String skill): super(name, age);
}
// ⚠️ super 和初始化列表是可以一起使用
// 顯示寫法
class Person {
String _name;
String get name => _name;
set name(String value) => _name = value;
Person(this._name);
}
// 隱式 / 自動生成的簡潔語法
// 也就是類別的每個公開欄位都自動具備隱式的 getter 和 setter。
class Person {
String name;
Person(this.name);
}
extends
實現,子類別會獲得父類別的功能可以直接使用或覆寫implements
語法實現。一個類別可以實現多個介面,必須提供介面宣告的全部方法with
實現,用於共用方法,不適合單一繼承或介面規範重複一樣的實作。class Vehicle {
void drive() {
print('move');
}
}
class Car implements Vehicle {
@override
void drive() {
print('move with gas');
}
}
class ElectricCar extends Car {
@override
void drive() {
print('move silently');
}
}
mixin AutoDriving {
void navigate() {
print('navigating');
}
}
class Tesla extends ElectricCar with AutoDriving {
@override
void drive() {
super.drive();
navigate();
}
}
class Person {
// 成員變數
String name;
int age;
// 構造函數
Person({required this.name, required this.age});
// 命名構造函數
Person.withDefaultName({required this.age}) : name = 'Unknown';
// 方法
void greet() {
print('Hello, my name is $name and I am $age years old.');
}
// 靜態方法
static void describe() {
print('This is a Person class.');
}
// Getter
String get info => 'Name: $name, Age: $age';
// Setter
set updateName(String newName) {
name = newName;
}
}